import("//llvm/lib/DebugInfo/PDB/enable_dia.gni")
import("//llvm/utils/gn/build/sysroot.gni")

static_library("PDB") {
  output_name = "LLVMDebugInfoPDB"
  deps = [
    "//llvm/include/llvm/Config:config",
    "//llvm/lib/DebugInfo/CodeView",
    "//llvm/lib/DebugInfo/MSF",
    "//llvm/lib/Object",
    "//llvm/lib/Support",
  ]
  sources = [
    "GenericError.cpp",
    "IPDBSourceFile.cpp",
    "Native/DbiModuleDescriptor.cpp",
    "Native/DbiModuleDescriptorBuilder.cpp",
    "Native/DbiModuleList.cpp",
    "Native/DbiStream.cpp",
    "Native/DbiStreamBuilder.cpp",
    "Native/EnumTables.cpp",
    "Native/FormatUtil.cpp",
    "Native/GSIStreamBuilder.cpp",
    "Native/GlobalsStream.cpp",
    "Native/Hash.cpp",
    "Native/HashTable.cpp",
    "Native/InfoStream.cpp",
    "Native/InfoStreamBuilder.cpp",
    "Native/InjectedSourceStream.cpp",
    "Native/InputFile.cpp",
    "Native/LinePrinter.cpp",
    "Native/ModuleDebugStream.cpp",
    "Native/NamedStreamMap.cpp",
    "Native/NativeCompilandSymbol.cpp",
    "Native/NativeEnumGlobals.cpp",
    "Native/NativeEnumInjectedSources.cpp",
    "Native/NativeEnumLineNumbers.cpp",
    "Native/NativeEnumModules.cpp",
    "Native/NativeEnumSymbols.cpp",
    "Native/NativeEnumTypes.cpp",
    "Native/NativeExeSymbol.cpp",
    "Native/NativeFunctionSymbol.cpp",
    "Native/NativeInlineSiteSymbol.cpp",
    "Native/NativeLineNumber.cpp",
    "Native/NativePublicSymbol.cpp",
    "Native/NativeRawSymbol.cpp",
    "Native/NativeSession.cpp",
    "Native/NativeSourceFile.cpp",
    "Native/NativeSymbolEnumerator.cpp",
    "Native/NativeTypeArray.cpp",
    "Native/NativeTypeBuiltin.cpp",
    "Native/NativeTypeEnum.cpp",
    "Native/NativeTypeFunctionSig.cpp",
    "Native/NativeTypePointer.cpp",
    "Native/NativeTypeTypedef.cpp",
    "Native/NativeTypeUDT.cpp",
    "Native/NativeTypeVTShape.cpp",
    "Native/PDBFile.cpp",
    "Native/PDBFileBuilder.cpp",
    "Native/PDBStringTable.cpp",
    "Native/PDBStringTableBuilder.cpp",
    "Native/PublicsStream.cpp",
    "Native/RawError.cpp",
    "Native/SymbolCache.cpp",
    "Native/SymbolStream.cpp",
    "Native/TpiHashing.cpp",
    "Native/TpiStream.cpp",
    "Native/TpiStreamBuilder.cpp",
    "PDB.cpp",
    "PDBContext.cpp",
    "PDBExtras.cpp",
    "PDBInterfaceAnchors.cpp",
    "PDBSymDumper.cpp",
    "PDBSymbol.cpp",
    "PDBSymbolAnnotation.cpp",
    "PDBSymbolBlock.cpp",
    "PDBSymbolCompiland.cpp",
    "PDBSymbolCompilandDetails.cpp",
    "PDBSymbolCompilandEnv.cpp",
    "PDBSymbolCustom.cpp",
    "PDBSymbolData.cpp",
    "PDBSymbolExe.cpp",
    "PDBSymbolFunc.cpp",
    "PDBSymbolFuncDebugEnd.cpp",
    "PDBSymbolFuncDebugStart.cpp",
    "PDBSymbolLabel.cpp",
    "PDBSymbolPublicSymbol.cpp",
    "PDBSymbolThunk.cpp",
    "PDBSymbolTypeArray.cpp",
    "PDBSymbolTypeBaseClass.cpp",
    "PDBSymbolTypeBuiltin.cpp",
    "PDBSymbolTypeCustom.cpp",
    "PDBSymbolTypeDimension.cpp",
    "PDBSymbolTypeEnum.cpp",
    "PDBSymbolTypeFriend.cpp",
    "PDBSymbolTypeFunctionArg.cpp",
    "PDBSymbolTypeFunctionSig.cpp",
    "PDBSymbolTypeManaged.cpp",
    "PDBSymbolTypePointer.cpp",
    "PDBSymbolTypeTypedef.cpp",
    "PDBSymbolTypeUDT.cpp",
    "PDBSymbolTypeVTable.cpp",
    "PDBSymbolTypeVTableShape.cpp",
    "PDBSymbolUnknown.cpp",
    "PDBSymbolUsingNamespace.cpp",
    "UDTLayout.cpp",
  ]
  if (llvm_enable_dia_sdk) {
    sources += [
      "DIA/DIADataStream.cpp",
      "DIA/DIAEnumDebugStreams.cpp",
      "DIA/DIAEnumFrameData.cpp",
      "DIA/DIAEnumInjectedSources.cpp",
      "DIA/DIAEnumLineNumbers.cpp",
      "DIA/DIAEnumSectionContribs.cpp",
      "DIA/DIAEnumSourceFiles.cpp",
      "DIA/DIAEnumSymbols.cpp",
      "DIA/DIAEnumTables.cpp",
      "DIA/DIAError.cpp",
      "DIA/DIAFrameData.cpp",
      "DIA/DIAInjectedSource.cpp",
      "DIA/DIALineNumber.cpp",
      "DIA/DIARawSymbol.cpp",
      "DIA/DIASectionContrib.cpp",
      "DIA/DIASession.cpp",
      "DIA/DIASourceFile.cpp",
      "DIA/DIATable.cpp",
    ]

    dia_lib_path = ""
    if (sysroot != "") {
      include_dirs = [ "$sysroot/DIA SDK/include" ]
      dia_lib_path = "$sysroot/DIA SDK/lib"  # x86 .lib file is here.
      if (current_cpu == "/arm") {
        dia_lib_path += "arm"
      } else if (current_cpu == "arm64") {
        dia_lib_path += "/arm64"
      } else if (current_cpu == "x64") {
        dia_lib_path += "/amd64"
      }
      lib_dirs = [ dia_lib_path ]
    }
    libs = [ "diaguids.lib" ]
  }
}
